(for Internet Explorer)
Sub  DoTextShrink( TxMxFilePath as string,  Option as Empty )
セクション(NaturalDocs で区切ったソース ファイル)のうち、使用していないセクションを削除します。
【引数】
TxMxFilePath
Option
編集するファイルなどが記述された .txmx ファイルのパス(下記)
Empty を指定してください
テスト
→ T_TextSection.vbs
T_TextShrink
ListUpTextShrinkKeywords
TxMxClass
(src)
DoTextShrink
(src)
ListUpUsingTxMxKeywords
vbs(src)
MakeShrinkedSectionsFile
(src)
ListUpUsingTxMxKeywords
c(src)
DoTextMix
vbs(src)
c(src)
TxMxListUp_listUpUsedNames
c(src)
TxMxListUp_readSetting
T_MakeTxScFile
MakeNaturalComments_C_Language
NaturalCommentClass
→ T_TextShrink フォルダー
ソース
→ ToolsLib.vbs
関連
CSV 形式の1行を解析して、それぞれの項目を配列に格納します。
Function  ArrayFromCSV( a_CSV as string ) as Array of string
For Each column  In ArrayFromCSV( "ABC , DEF" )
Next
【引数】
a_CSV
返り値
CSV 形式の1行
(出力)CSV の項目が入った配列
関連
各項目の両端の空白が削除されたものが戻ります。
項目の端に空白文字がある場合と、項目の中にコンマやダブルクォーテーション(")が
あるときは、" " で囲んでください。 ただし、ダブルクォーテーション1文字あたり、
ダブルクォーテーションを2つ並べてください。
→ T_CSV.vbs # ArrayFromCSV
テスト
(src)
Function  ArrayFromCSV_Int( a_CSV as string ) as Array of integer
上記 ArrayFromCSV の返り値は、Array( "ABC", "DEF" )
ABC , DEF
A, "  ""ABC,"" "
A
  "ABC,"
CSV:
各項目:
VBS:
ArrayFromCSV( "A, ""  """"ABC,"""" """ )
CSV とは別に、VBS も同様に " 文字は " を2つ並べる
"A,  ,C" の真ん中の要素のように、何も無いときは、配列の要素が Empty になります。
"A, " のように最後がコンマのときは、配列の最後の要素が Empty になります
" " のように、空白文字や空文字列のときは、配列要素数が 0 になります。
ArrayFromCSV( "A,,C" ) = Array( "A", Empty, "C" )
ArrayFromCSV( "A," ) = Array( "A", Empty )
要素に "" (ダブルクオーテーション2つだけ)が指定されたときは、空文字列になります。
ArrayFromCSV( "A, """"" ) = Array( "A", "" )
ArrayFromCSV( " " ) = Array( )
複数行の文字列を指定するときは、最後の行以外の行末を "," にしてください。
ArrayFromCSV( "A, B," +vbCRLF+ "C, D," +vbCRLF+ "E, F" )
 = Array( "A","B","C","D","E","F" )
A, B,
C, D,
E, F
つまり
A, B, C, D, E, F
サンプル
性能について
本関数は処理が遅いです。
CSV ファイルのデータは、1行に対応するクラスの配列にキャッシュしておくと速くなります。
paths = ArrayFromCSV( Replace( Trim2( multi_line_string ), vbCRLF, "," ) )
サンプル
複数行の文字列から、各行を配列にする
For Each column  In ArrayFromOrPipe( Array( "*.txt | ""A *.log""", "*.xml" ) )
Next
| で区切られた文字列を解析して、それぞれの項目を配列に格納します。
Function  ArrayFromOrPipe( in_OrPipedString as string or array of string ) as Array of string
For Each column  In ArrayFromOrPipe( "ABC | DEF" )
Next
【引数】
in_OrPipedString
返り値
| または , で区切られた文字列、または、その配列
(出力) 文字列の配列
上記 ArrayFromOrPipe の返り値は、Array( "ABC", "DEF" )
ABC | DEF
サンプル
→ vbslib.vbs
ソース
とほぼ同じですが、コンマだけでなく | も区切り記号として処理します。
"*.txt | ""A *.log""", "*.xml"
上記 ArrayFromOrPipe の返り値は、Array( "*.txt", "A *.log", "*.xml" )
サンプル
テスト
→ T_Wildcard.vbs
T_ArrayFromWildcard1
T_ArrayFromWildcard2
Function  CSVFrom( a_Array as array ) as string
配列を CSV 形式に変換します。
【引数】
a_Array
返り値
配列
CSV 形式文字列
ソース
→ T_CSV.vbs
テスト
→ vbslib.vbs
Function  CSVText( s as string ) as string
CSV の1項目に変換します。
サンプル
s = CSVText( "a,b" )
s は、"""a,b""" という1つの値になります。
a と b という2つの値ではありません。
  s = ""
  For Each  t  In Array( "a", "b" )
    If s <> "" Then  s = s + ", "
    s = s + CSVText( t )
  Next
サンプル
CSV の1行を作成します
→ T_CSV.vbs
ソース
テスト
→ vbslib.vbs
CSV 形式の1項目を取り出し、通常の文字列に戻す。
Function  MeltCSV( Line as string, in_out_Start as integer ) as string
  i = 1
  Do
    s = MeltCSV( line, i )
    If not IsEmpty( s ) Then (s を使った処理)
    If i = 0 Then Exit Do
  Loop
【引数】
Line
in_out_Start
CSV 形式の1行
(入力) 取り出しを開始する文字の位置、(出力)次に取り出す〜
返り値
取り出した CSV 形式の1項目。Empty=項目に値が無い
サンプル
(src)
関連
各項目の両端の空白が削除されたものが戻ります。
次の項目が無いときは、i=0 になります。
i=0 を渡すと、Empty を返します。
→ T_CSV.vbs # main
テスト
→ T_CSV.vbs
ソース
Function  CSV_insert( CSV_Line as string, RightColumnNum0 as integer, Element as variant )
    as string
CSV 形式の1行に、要素を挿入します。
【引数】
CSV_Line
RightColumnNum0
CSV 形式の1行
挿入する位置の右の要素の番号(0以上)
テスト
→ vbslib.vbs
挿入した後の CSV 形式の1行
挿入する要素
Element
返り値
サンプル
Assert  CSV_insert( "A,B,C", 1, "x" ) = "A,x,B,C"
Assert  CSV_insert( "A,B,C", 4, "x" ) = "A,B,C,,x"
→ T_CSV.vbs
ソース
Function  CSV_set( CSV_Line as string, ColumnNum0 as integer, Element as variant )
    as string
CSV 形式の1つの要素を上書きします。
【引数】
CSV_Line
ColumnNum0
CSV 形式の1行
上書きする要素の番号(0以上)
テスト
→ vbslib.vbs
上書きした後の CSV 形式の1行
上書きする要素
Element
返り値
サンプル
Assert  CSV_set( "A,B,C", 1, "x" ) = "A,x,C"
Assert  CSV_set( "A,B,C", 4, "x" ) = "A,B,C,,x"
→ T_CSV.vbs
ソース
Function  CSV_remove( CSV_Line as string, ColumnNum0 as integer ) as string
CSV 形式の1つの要素を削除します。
【引数】
CSV_Line
ColumnNum0
CSV 形式の1行
削除する要素の番号(0以上)
テスト
→ vbslib.vbs
削除した後の CSV 形式の1行
返り値
サンプル
Assert  CSV_remove( "A,B,C", 1 ) = "A,C"
Assert  CSV_remove( "A,B,C", 4 ) = "A,B,C,"
Assert  CSV_remove( "A,B,C,", 3 ) = "A,B,C"
削除する要素より前の要素が無いときは、前に空の要素が追加されます
(src)
Function  LoadXML( PathOrStr as string, Opt as variant ) as IXMLDOMElement
XML ファイル、または XML 形式の文字列を読み込みます。
【引数】
PathOrStr
XML ファイルのパス、または XML 形式文字列や
Opt
オプション(下記)
IXMLDOMElement
XML のルート要素
返り値
F_NoRoot フラグ、g_VBS_Lib.NoRootXML
XML のルート要素が無い XML を読み込みます。 返り値は、内部で自動的に
加えられたルート要素 <Dummy_Root_> になります。
先頭が < でないときは、自動的にルート要素が加えられます。
F_Str フラグ、g_VBS_Lib.StringData
PathOrStr 引数を XML 形式文字列として処理します
サンプル: XML 形式文字列を展開する
    Dim  s : s = "ABC <TAG1 attr='value1'/> 123"
    Dim  root : Set root = LoadXML( s, F_NoRoot or F_Str )
    Dim  value : value = root.selectSingleNode( "./TAG1" ).getAttribute( "attr" )
    '//  value = "value1"
関連
LoadXML
    Dim  root, elem, attr

    Set root = LoadXML( "sample.xml", Empty )

    '//=== read 1 attribute value
    WScript.Echo  root.selectSingleNode( "./Tests/Test" ).getAttribute( "result" )

    '//=== read 1 text value
    WScript.Echo  root.selectSingleNode( "./Tests" ).text

    Set node = root.selectSingleNode( "./Tests/text()" )
    If not node is Nothing Then  WScript.Echo  node.nodeValue

    '//=== loop each tags
    For Each  elem  In  root.selectNodes( "./Tests/Test" )
        WScript.Echo  "result, "+ elem.getAttribute( "result" )
    Next

    Set nodes = root.selectNodes( "./Tests" )
    ReDim  values( nodes.length - 1 )
    For i=0 To UBound( values )
        values(i) = nodes(i).text
    Next

    '//=== loop each attributes
    For Each elem  In root.selectNodes( ".//Test" )
        WScript.Echo  "<" + elem.tagName + ">"
        For Each attr  In elem.attributes
            WScript.Echo  attr.name + "=" + attr.value
        Next
    Next
"sample.xml"
"./Tests/Test"
"./Tests/Test"
"result"
"result"
".//Test"
result
→ DOM サンプル
LoadXML
日本語があるときは、Unicode にするか、XML宣言で Shift-JIS を指定してください。
→ XmlFilter ツール (.zip)
テスト
→ T_XML フォルダー
サンプル: XML を結合する
    Dim  f, root, elem, attr

    Set f = OpenForWrite( "FileAB.xml", Empty )
    f.WriteLine  "<TabA>"
    Set root = LoadXML( "FileA.xml", Empty )
    f.WriteLine  XmlTags( root.selectSingleNode( "./TagB" ).xml, 1 )
    Set root = LoadXML( "FileB.xml", Empty )
    f.WriteLine  XmlTags( root.selectSingleNode( "./TagB" ).xml, 1 )
    f.WriteLine  "</TabA>"
→ XML
参考
./Tests/text()
関連
selectSingleNode
selectNodes
getAttribute
SuperClass タグの属性を子タグにコピーして、id 属性を持たない SuperClass タグを
削除した XML データを返します。 super_class 属性を持つタグは、super_class 属性が
指す id 属性を持つ SuperClass タグの属性をコピーします。
参考: T_InheritSuperClassXML テスト
    <SuperClass  priority="1000">
        <File  path="*.c"/>
        <File  path="*.h"/>
    </SuperClass>
    <SuperClass  priority="2000"  id="Super1"/>
    <File  path="*.cpp"  super_class="#Super1"/>
    <File  path="*.c"  priority="1000"/>
    <File  path="*.h"  priority="1000"/>
    <SuperClass  priority="2000"  id="Super1"/>
    <File  path="*.cpp"  super_class="#Super1"  priority="2000"/>
FileA.xml ファイル
LoadXML の返り値の XML
XML ファイルの内容を内部でキャッシュします。
関連
Default Property Get  XML_ReadCacheClass::Item( URL as string ) as string
XML のテキスト、または、属性値を返します。
【引数】
URL
返り値
XML ファイルのパス +"#"+ XPath
XML のテキスト、または、属性値
サンプル
→ vbslib.vbs
ソース
Set files = new XML_ReadCacheClass
tag_text = files( "Sample.xml#/Root/Tag" )
'// tag_text = "The text"
Sample.xml#/Root/Tag
Sample.xml
VBScript
<Root>
<Tag>The text</Tag>
</Root>
→ T_XML.vbs # [T_XML_ReadCacheClass]
テスト
Function  LoadXML_Cached( PathOrStr as string, Opt as variant ) as IXMLDOMElement
IXMLDOMElement
XML を解析してできた DOM オブジェクトをキャッシュする
返り値がどの変数から参照されなくなっても、キャッシュのために、DOM オブジェクトはメモリー上に
残ります。 vbslib の内部に絶対パスをキー、DOM オブジェクトをアイテムとした辞書型のキャッシュ
があります。
ソース
→ vbslib.vbs
2回目以降の XML ファイルは、キャッシュによって XML を解析する処理がなくなり、高速に処理
します。
関連
関連
Function  OpenForReplaceXML( SrcPath as string, DstPath as string ) as ReplaceXmlFile1
XMLファイルの内容の変更を開始します。
【引数】
SrcPath
DstPath
変更前のテキストファイルのパス
変更後のテキストファイルのパス。 SrcPath と同じ、または Empty 可。
返り値
    Set xml = OpenForReplaceXML( "file1.xml", Empty )
    xml.Write  "/Root/Elem/@attr1", 11
    xml.IsUserConfirm = True
    xml = Empty  '// デストラクタでユーザーの確認およびファイルの更新をする
file1.xml
/Root/Elem/@attr1
11
テスト
→ T_XML.vbs # [T_OpenForReplaceXML]
タグの間のテキスト、または XML 属性の値を変更します。
XML ファイルを変更する前に、ユーザーに確認をとるかどうか。
→ T_XML_Manually.vbs # [T_OpenForReplaceXML_Manually]
→ vbslib.vbs
サンプル
ソース
Sub  ReplaceXmlFile1::Write( XPath as string, Value as string )
→ サンプル
XML のタグの間のテキスト、または XML の属性の値を変更します。
【引数】
XPath
タグの間のテキスト、または XML の属性の位置を表す XPath
返り値
変化があったかどうか
変更後のテキストまたは XML 属性の値、""=値なし、Empty=削除する
Value
参考
Sub  ReplaceXmlFile1::SetXmlAttribute( XPathForXmlElement as string, AttrName as string,
                                       AttrValue as string );
XML 属性の値を変更します。
【引数】
XPathForXmlElement
AttrName
属性を変更する XML 要素(タグ) への XPath。 フル・パス
XML 属性の名前
AttrValue
変更後の XML 属性の値
→ サンプル
廃止されました。
Dim  ReplaceXmlFile1::IsUserConfirm as boolean
XML ファイルを変更する前に、ユーザーに確認をとるかどうかの設定値。
XML ファイルを更新する直前で、値が変わる属性とその値を表示します。
表示中に、ユーザーの確認入力があるまで待ちます。
デフォルトは、False です。
/Root/Tests/Test1@attr1="1"
/Root/Tests/Test3@attr1="3"
更新ファイル:out.xml
XML ファイルの上記属性を変更します。
続行するには Enter キーを押してください . . .
確認画面の例:
→ サンプル
Function  OpenForAppendXml( SrcPath as string, DstPath as string ) as AppendXmlFile
XMLファイルの内容の追加を開始します。
【引数】
返り値を使って呼び出せるメソッドは、FileSystemObject::OpenTextFile と同じですが、
WriteXml メソッドが追加されています。
Modify.xml (処理前)
Modify.xml (処理後)
<Modify>
<Child1 value="1"/>
</Modify>
クローズするときに、ルートの XML タグ(XML要素)を閉じるタグを出力します。
よって、追加する内容は、ルートの XML タグの直下の末尾に限定されます。
Set file = OpenForAppendXml( "Modify.xml", Empty )
file.WriteLine  "<Child2 value=""2""/> <!-- by WriteLine -->"
file.WriteXml  ReadFile( "Add.xml" )
file = Empty
サンプル
<Modify>
<Child1 value="1"/>
<Child2 value="2"/> <!-- by WriteLine -->
<AddChild value="3"/>
</Modify>
<Add>
<AddChild value="3"/>
</Add>
Add.xml
追加する内容は、OpenForWrite と同様に WriteLine などのメソッドに XML の文字列を
指定します。 XPath ではありません。
テスト
→ T_XML.vbs # [T_OpenForAppendXml]
SrcPath
DstPath
変更前のテキストファイルのパス
変更後のテキストファイルのパス。 SrcPath と同じ、または Empty 可。
返り値
TextStream + α のオブジェクト
(src)
Sub  AppendXmlFile::WriteXml( Xml as string )
指定した XML 文字列から、ルート XML タグを除いて追加します。
【引数】
Xml
追加する XML 文字列
file.WriteXml  "<Root><Child/><Root>"
サンプル
サンプル
OpenForAppendXml( "Modify.xml", Empty ).WriteXml  ReadFile( "Add.xml" )
<Child/> を追加します
Modify.xml に Add.xml を追加します。
Modify.xml (処理前)
Modify.xml (処理後)
<Modify>
<Child1 value="1"/>
</Modify>
<Modify>
<Child1 value="1"/>
<AddChild value="2"/>
</Modify>
<Add>
<AddChild value="2"/>
</Add>
Add.xml
(src)